package com.poi;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import java.io.File;
import java.io.FileInputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * @author ZhangYue26
 * @date 2020-07-03 10:54
 * @Description: POI-Excel表操作示例
 */
public class POIDemo {

    public static void main(String[] args) throws Exception {
        List<List<String>> lists = addDataByExeclImport("C:\\Users\\zhangyue26\\Desktop\\宝坻智寻需要导入的点位.xls");
        System.out.println(lists);
    }

    /**
     * @Author ZhangYue26
     * @Description: 读取Excel表格文件 支持后缀名为 xlsx 与 xls 的表格文件
     * @Description //TODO
     * @Date 2020/7/3 11:01
     * @Param [url]
     * @return void
     **/
    public static List<List<String>> addDataByExeclImport(String url) throws Exception {
        List<List<String>> resultList = new ArrayList<>();
        File file = new File(url);
        if (file.isFile() && file.exists()) {     //判断文件是否存在
            String[] split = file.getName().split("\\.");  //获取文件的后缀名,"."是特殊字符，需要转化
            Workbook wb;  //定义文档对象
            if ("xls".equals(split[1])) {   //xls，xlsx对文档对象的实现方式是不同的，需要不同对待
                FileInputStream inputStream = new FileInputStream(file);
                wb = new HSSFWorkbook(inputStream);
            }else if ("xlsx".equals(split[1])){
                wb = new XSSFWorkbook(file);
            }else {
                throw new Exception("文件类型错误");
            }
            Sheet sheet = wb.getSheetAt(0);  //开始解析工作表
            int firstRowNum = sheet.getFirstRowNum(); //获取当前表格的第一行
            int lastRowNum = sheet.getLastRowNum();   //获取当前表格的最后一行
            //遍历数据集
            for (int rIndex = firstRowNum; rIndex <= lastRowNum; rIndex++) {
                List<String> stringList = new ArrayList<>();
                Row row = sheet.getRow(rIndex); // 获取当前行数据
                if (row != null) {
                    int firstCellNum = row.getFirstCellNum(); //当前行的第一列
                    int lastCellNum = row.getLastCellNum();   //当前行的最后一列(说明3，见后文)
                    for (int cIndex = firstCellNum; cIndex < lastCellNum; cIndex++) {
                        Cell cell = row.getCell(cIndex);
                        if (cell == null) {//因为有可能会出现空指针异常，这里则直接给它赋值为""空字符串
                            stringList.add("");
                        } else {
                            cell.setCellType(Cell.CELL_TYPE_STRING); //设置列值类型，基本都为STRING型没问题
                            String value = row.getCell(cIndex).getStringCellValue(); //获取列值
                            stringList.add(value);
                        }

                    }

                }
                resultList.add(stringList);
            }
        }
        return resultList;
    }








}
